package com.itheima.mobile.service.impl;

import com.itheima.common.entity.Result;
import com.itheima.mobile.mapper.SetmealDao;
import com.itheima.mobile.pojo.Setmeal;
import com.itheima.mobile.service.IsetmealService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.xmlbeans.impl.jam.provider.ResourcePath;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class IsetmealServiceImpl implements IsetmealService {

    @Autowired
    private SetmealDao setmealDao;

    /**
     * 查询所有套餐
     *
     * @return
     */
    @Override
    public Result getSetmeal() {
        List<Setmeal> setmealList = setmealDao.getSetmeal();
        return Result.of(true, "查询套餐数据成功", setmealList);
    }

    /**
     * 根据id查询套餐详情
     *
     * @param id
     * @return
     */
    @Override
    public Result findById(String id) {
        Setmeal setmeal = setmealDao.findById(id);
        return Result.of(true, "查询套餐数据成功", setmeal);
    }

    /**
     * 生成套餐页
     *
     * @throws Exception
     */
    @Override
    public void generateSetmealHtml() throws Exception {
        Configuration cfg = new Configuration(Configuration.getVersion());
        String path = ResourcePath.class.getResource("/templates").getPath();
        cfg.setDirectoryForTemplateLoading(new File(path));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        cfg.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = cfg.getTemplate("mobile_setmeal.ftl");
        Map map = new HashMap();
        List<Setmeal> setmealList = setmealDao.getSetmeal();
        map.put("setmealList", setmealList);

        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        String outPath = ResourcePath.class.getResource("/mobile/pages/").getPath();
        Writer out = new FileWriter(new File(outPath + "setmeal.html"));
        template.process(map, out);
        // 第八步：关闭流。
        out.close();
    }

    @Override
    public void generateSetmealDetailHtml(List<String> setmealIds) throws Exception {
        Configuration cfg = new Configuration(Configuration.getVersion());
        String path = ResourcePath.class.getResource("/templates").getPath();
        cfg.setDirectoryForTemplateLoading(new File(path));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        cfg.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = cfg.getTemplate("mobile_setmeal_detail.ftl");
        //数据填充
        for (String id : setmealIds) {
            Setmeal setmeal = setmealDao.findById(id);
            Map map = new HashMap();
            map.put("setmeal", setmeal);
            // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
            String outPath = ResourcePath.class.getResource("/mobile/pages/").getPath();
            Writer out = new FileWriter(new File(outPath + "setmeal_detail_" + id + ".html"));
            template.process(map, out);
            // 第八步：关闭流。
            out.close();
        }
    }
}
